home *** CD-ROM | disk | FTP | other *** search
- {$G+}
- unit graf;
-
- INTERFACE
-
- CONST
- VGA :pointer=PTR($a000,$0);
-
- TYPE
- color = record
- r,g,b : byte;
- end;
- paleta = array [0..255] of color;
-
- PROCEDURE Set_vga;
- PROCEDURE Set_text;
- PROCEDURE Cls(color:byte;VAR donde);
- PROCEDURE Flip(VAR desde,hasta);
- PROCEDURE PutRGB(Color,R,G,B : Byte);
- PROCEDURE GetRGB(Color:byte; VAR R, G, B:byte);
- PROCEDURE Putpaleta(pal:paleta);
- PROCEDURE Getpaleta(VAR pal:paleta);
- PROCEDURE EsperaVGA;
- PROCEDURE Lee_pcx(Var origen; espacio:word;VAR destino);
- PROCEDURE Load_pcx (origen:String;VAR destino);
- PROCEDURE Putpixel (X,Y : Integer; Col : Byte; where:word);
-
- IMPLEMENTATION
-
- PROCEDURE Set_vga; ASSEMBLER;
- ASM
- mov ax,13h
- int 10h
- END;
-
- PROCEDURE Set_text; ASSEMBLER;
- ASM
- mov ax,3h
- int $10
- END;
-
- PROCEDURE Cls(color:byte;VAR donde);ASSEMBLER;
- ASM
- les di,donde
- mov al,byte ptr color
- mov ah,al
- db $66, $c1, $e0, $10
- mov al,byte ptr color
- mov ah,al
- mov cx,16000
- db $f3,$66,$ab
- end;
-
- Procedure Flip (VAR desde,hasta); Assembler;
- ASM
- mov bx,ds
- lds si,desde
- les di,hasta
- mov cx,16000
- db $f3,$66,$a5 {rep movsd}
- mov ds,bx
- end;
-
- PROCEDURE PutRGB(Color,R,G,B : Byte);
- BEGIN
- Port[$3c8]:=Color;
- Port[$3c9]:=R;
- Port[$3c9]:=G;
- Port[$3c9]:=B;
- END;
-
- PROCEDURE GetRGB(Color:byte; VAR R, G, B:byte);
- BEGIN
- Port[$3c7]:=Color;
- R:=Port[$3c9];
- G:=Port[$3c9];
- b:=Port[$3c9];
- END;
-
- PROCEDURE PutPaleta (pal:paleta);
- VAR
- cont : integer;
- BEGIN
- for cont:=0 to 255 do
- PutRGB(cont,pal[cont].r,pal[cont].g,pal[cont].b);
- END;
-
- PROCEDURE GetPaleta (VAR pal:paleta);
- VAR
- cont : integer;
- BEGIN
- for cont:=0 to 255 do
- GetRGB(cont,pal[cont].r,pal[cont].g,pal[cont].b);
- END;
-
- PROCEDURE EsperaVGA; assembler;
- asm
- mov dx,3DAh
- @l1:
- in al,dx
- and al,08h
- jnz @l1
- @l2:
- in al,dx
- and al,08h
- jz @l2
- end;
-
-
- PROCEDURE Putpixel (X,Y : Integer; Col : Byte; where:word);ASSEMBLER;
- ASM
- mov ax,where
- mov es,ax
- mov bx,[X]
- mov dx,[Y]
- mov di,bx
- mov bx, dx
- shl dx, 8
- shl bx, 6
- add dx, bx
- add di, dx
- mov al, [Col]
- mov es:[di],al
- END;
-
- Procedure Lee_pcx(Var origen; espacio:word;VAR destino);ASSEMBLER;
- VAR
- cont : word;
- ASM
- Push DS
- mov ax,espacio
- mov cont,ax
- sub cont,769 {768}
- lds si,origen
- add si,cont
- cld
- mov cx,256
- mov bx,0
- xor ah,ah
- @@divide:
- mov dx,$3c8
- mov al,bl
- out dx,al
- mov dx,$3c9
- lodsb
- shr al,2
- out dx,al
- lodsb
- shr al,2
- out dx,al
- lodsb
- shr al,2
- out dx,al
- add bx,1
- sub cx,1
- jnz @@divide
-
- les di,destino
- lds si,origen
- add si,128
- mov dx,cont
- @bucle:
- lodsb
- cmp al,192
- Jb @norepite
-
- cmp si,dx
- jz @end
-
- sub al,192
- mov cl,al
- lodsb
- jmp @escribe
- @norepite:
- mov cx,1
- @escribe:
- rep stosb
- cmp si,dx
- jz @end
- jmp @bucle
- @end:
- pop ds
- END;
-
- PROCEDURE Load_pcx (origen:String;VAR destino);
- VAR
- pointr : Pointer;
- fichero : file;
- tamany : word;
- BEGIN
- assign (fichero,origen);
- reset (fichero,1);
- getmem (pointr,filesize(fichero));
- blockread (fichero,pointr^,filesize(fichero),tamany);
- lee_pcx (pointr^,tamany,destino);
- Freemem (pointr,filesize(fichero));
- close (fichero);
- end;
-
- begin
- end.
-